package kr.co.bettersoft.sendme.activity;

import kr.co.bettersoft.sendme.util.SendMeActivityManager;
import kr.co.bettersoft.sendme.util.SendMeConstant;
import kr.co.bettersoft.sendme.activity.R;
import android.R.color;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ImageButton;
import android.widget.ProgressBar;

/**
 * 이용약관과 개인정보 보호정책 화면 액티비티 클래스 이다.
 * 
 * @author johnkim
 *
 */
public class SendMePolicyActivity extends Activity {

	public static String TAG = SendMePolicyActivity.class.getSimpleName();
	
	// 액티비티 매니저를 가져 온다.
	private SendMeActivityManager sendMeActivityManager = SendMeActivityManager.getInstance();
	
	WebView webViewTerms;
	WebView webViewPrivatePolicy;
	
	ProgressBar progressBarTerms;
	ProgressBar progressBarPrivatePolicy;
	
	ImageButton imageButtonTerms;
	ImageButton imageButtonPrivatePolicy;
	boolean imageButtonTermsOnOff;
	boolean imageButtonPrivatePolicyOnOff;
	
	
	Button buttonOk;
	
	// 약관 프로그레스 바를 출력 한다.
	private static final int THREAD_PROGRESS_BAR_TERMS_VISIBLE = 101;
	
	// 약관 프로그레스 바를 감춘다.
	private static final int THREAD_PROGRESS_BAR_TERMS_INVISIBLE = 102;
	
	// 개인정보 프로그레스 바를 출력 한다.
	private static final int THREAD_PROGRESS_BAR_PRIVATE_POLICY_VISIBLE = 103;
	
	// 개인정보 프로그레스 바를 감춘다.
	private static final int THREAD_PROGRESS_BAR_PRIVATE_POLICY_INVISIBLE = 104;
	
	// 동의 alert 창을 띄운다.
	private static final int THREAD_CONSENT_ALERT = 105;
	
	// 앱을 종료 한다.
	private static final int ALERT_DIALOG_EXIT_ID = 106;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		// 커스텀 타이블 바를 설정 한다.
		Window window = getWindow();
		window.requestFeature(Window.FEATURE_CUSTOM_TITLE);

		setContentView(R.layout.activity_send_me_policy);

		window.setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_bar_01);
		
		// 액티비티 매니저에 담는다.
		sendMeActivityManager.addActivity(this);
		
		webViewTerms = (WebView)findViewById(R.id.webViewTerms);
//		webViewTerms.setBackgroundColor(Color.TRANSPARENT);
//		webViewTerms.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
//		webViewTerms.setBackgroundColor(Color.argb(1, 255, 255, 255));
//		webViewTerms.setBackgroundColor(0x00000000);
//		webViewTerms.setBackgroundColor(color.transparent);
//		webViewTerms.setBackgroundResource(R.drawable.beige_bg);
		
		webViewPrivatePolicy = (WebView)findViewById(R.id.webViewPrivatePolicy);
		
		progressBarTerms = (ProgressBar)findViewById(R.id.progressBarTerms);
		progressBarPrivatePolicy = (ProgressBar)findViewById(R.id.progressBarPrivatePolicy);
		
		imageButtonTerms = (ImageButton)findViewById(R.id.imageButtonTerms);
		imageButtonPrivatePolicy = (ImageButton)findViewById(R.id.imageButtonPrivatePolicy);
		imageButtonTermsOnOff = false;
		imageButtonPrivatePolicyOnOff = false;
		
		imageButtonTerms.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// 체크 여부에 따라 이미지를 세팅 한다.
				if(!imageButtonTermsOnOff){
					imageButtonTerms.setBackgroundResource(R.drawable.beige_checkbox_on);
				}else{
					imageButtonTerms.setBackgroundResource(R.drawable.beige_checkbox_off);
				}
				imageButtonTermsOnOff = !imageButtonTermsOnOff;			
				
				// 갤2 테스트용
//				if(imageButtonTermsOnOff&&imageButtonPrivatePolicyOnOff){
//					// 인증화면을 출력 한다.
//					Intent i = new Intent(SendMePolicyActivity.this, SendMeCertificationActivity.class);
//					startActivity(i);
//					
//					// 종료하기 전에 액티비티 매니져에서 액티비티를 삭제 한다.
//					sendMeActivityManager.removeActivity(SendMePolicyActivity.this);
//					
//					finish();
//				}
			}
		});
		imageButtonPrivatePolicy.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// 체크 여부에 따라 이미지를 세팅 한다.
				if(!imageButtonPrivatePolicyOnOff){
					imageButtonPrivatePolicy.setBackgroundResource(R.drawable.beige_checkbox_on);
				}else{
					imageButtonPrivatePolicy.setBackgroundResource(R.drawable.beige_checkbox_off);
				}
				imageButtonPrivatePolicyOnOff = !imageButtonPrivatePolicyOnOff;
				
				// 갤2 테스트용
//				if(imageButtonTermsOnOff&&imageButtonPrivatePolicyOnOff){
//					// 인증화면을 출력 한다.
//					Intent i = new Intent(SendMePolicyActivity.this, SendMeCertificationActivity.class);
//					startActivity(i);
//					
//					// 종료하기 전에 액티비티 매니져에서 액티비티를 삭제 한다.
//					sendMeActivityManager.removeActivity(SendMePolicyActivity.this);
//					
//					finish();
//				}
			}
		});
		
		
		buttonOk = (Button)findViewById(R.id.buttonOk);
		
		// 이용약관 화면을 출력 한다.
		webViewTerms.setWebViewClient(new Terms());
		WebSettings webSettings = webViewTerms.getSettings();
		webSettings.setJavaScriptEnabled(true);
		webViewTerms.loadUrl(SendMeConstant.TERMS_URL);
		Log.i(TAG, "TERMS_URL : " + SendMeConstant.TERMS_URL);
		
		// 개인정보 보호정책 화면을 출력 한다.
		webViewPrivatePolicy.setWebViewClient(new PrivatePolicy());
		WebSettings webSettingsPrivatePolicy = webViewPrivatePolicy.getSettings();
		webSettingsPrivatePolicy.setJavaScriptEnabled(true);
		webViewPrivatePolicy.loadUrl(SendMeConstant.PRIVATE_POLICY_URL2);
		Log.i(TAG, "PRIVATE_POLICY_URL2 : " + SendMeConstant.PRIVATE_POLICY_URL2);
		
		// 확인버튼을 정의 한다.
		buttonOk.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
					
				if(imageButtonTermsOnOff && imageButtonPrivatePolicyOnOff) {
					// 인증화면을 출력 한다.
					Intent i = new Intent(SendMePolicyActivity.this, SendMeCertificationActivity.class);
					startActivity(i);
					
					// 종료하기 전에 액티비티 매니져에서 액티비티를 삭제 한다.
					sendMeActivityManager.removeActivity(SendMePolicyActivity.this);
					
					finish();
				} else {
					Log.i(TAG, "동의해야한다.");
					// 동의하라는 alert 창을 띄운다.
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_CONSENT_ALERT));
				}
			}
		});
	}
	
	/**
	 * 이용약관과 개인정보 보호정책에 동의하라는 alert 을 띄운다.
	 */
	private void showDialogConsent() {
		new AlertDialog.Builder(SendMePolicyActivity.this)
		.setTitle("동의 확인")
		.setMessage("이용약관과 개인정보 보호정책에 동의해야 합니다.")
		.setPositiveButton("확인", new DialogInterface.OnClickListener() {
			
			@Override
			public void onClick(DialogInterface dialog, int which) {
				// TODO Auto-generated method stub
				
			}
		}).show();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.send_me_policy, menu);
		return true;
	}

	/**
	 * Handler 를 정의 한다.
	 * 모든 Thread 를 등록해 놓고 호출 한다.
	 */
	private Handler mHandler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			switch(msg.what) {
			// 약관 프로그레스 바를 출력 한다.
			case THREAD_PROGRESS_BAR_TERMS_VISIBLE : 
				progressBarTerms.setVisibility(View.VISIBLE);
				break;
			// 약관 프로그레스 바를 감춘다.
			case THREAD_PROGRESS_BAR_TERMS_INVISIBLE : 
				progressBarTerms.setVisibility(View.INVISIBLE);
				break;
			// 개인정보 프로그레스 바를 출력 한다.
			case THREAD_PROGRESS_BAR_PRIVATE_POLICY_VISIBLE : 
				progressBarPrivatePolicy.setVisibility(View.VISIBLE);
				break;
			// 개인정보 프로그레스 바를 감춘다.
			case THREAD_PROGRESS_BAR_PRIVATE_POLICY_INVISIBLE : 
				progressBarPrivatePolicy.setVisibility(View.INVISIBLE);
				break;
			// 동의 alert 창을 띄운다.
			case THREAD_CONSENT_ALERT : 
				showDialogConsent();
				break;
			// 뒤로가기 버튼을 터치하면 alert 창을 띄우고 앱을 종료 한다.
			case ALERT_DIALOG_EXIT_ID : 
				showDialogSystemExit();
				break;
			}
		}
	};
	
	/**
	 * WebViewClient 를 상속하는 이용약관 클래스 이다.
	 * 
	 * @author johnkim
	 *
	 */
	class Terms extends WebViewClient {
		public boolean shouldOverrideUrlLoading(WebView view, String url) {
			view.loadUrl(url);
			return true;
		}

		/* (non-Javadoc)
		 * @see android.webkit.WebViewClient#onPageFinished(android.webkit.WebView, java.lang.String)
		 */
		@Override
		public void onPageFinished(WebView view, String url) {
			// TODO Auto-generated method stub
			super.onPageFinished(view, url);
			
			mHandler.sendMessage(mHandler.obtainMessage(THREAD_PROGRESS_BAR_TERMS_INVISIBLE));
		}

		/* (non-Javadoc)
		 * @see android.webkit.WebViewClient#onPageStarted(android.webkit.WebView, java.lang.String, android.graphics.Bitmap)
		 */
		@Override
		public void onPageStarted(WebView view, String url, Bitmap favicon) {
			// TODO Auto-generated method stub
			super.onPageStarted(view, url, favicon);
			
			mHandler.sendMessage(mHandler.obtainMessage(THREAD_PROGRESS_BAR_TERMS_VISIBLE));
		}
	}
	
	/**
	 * WebViewClient 를 상속하는 개인정보 클래스 이다.
	 * 
	 * @author johnkim
	 *
	 */
	class PrivatePolicy extends WebViewClient {
		public boolean shouldOverrideUrlLoading(WebView view, String url) {
			view.loadUrl(url);
			return true;
		}

		/* (non-Javadoc)
		 * @see android.webkit.WebViewClient#onPageFinished(android.webkit.WebView, java.lang.String)
		 */
		@Override
		public void onPageFinished(WebView view, String url) {
			// TODO Auto-generated method stub
			super.onPageFinished(view, url);
			
			mHandler.sendMessage(mHandler.obtainMessage(THREAD_PROGRESS_BAR_PRIVATE_POLICY_INVISIBLE));
		}

		/* (non-Javadoc)
		 * @see android.webkit.WebViewClient#onPageStarted(android.webkit.WebView, java.lang.String, android.graphics.Bitmap)
		 */
		@Override
		public void onPageStarted(WebView view, String url, Bitmap favicon) {
			// TODO Auto-generated method stub
			super.onPageStarted(view, url, favicon);
			
			mHandler.sendMessage(mHandler.obtainMessage(THREAD_PROGRESS_BAR_PRIVATE_POLICY_VISIBLE));
		}
	}

	/**
	 * 뒤로 가기 버튼을 정의 한다.
	 * 설치단계이기 때문에 뒤로가기 버튼을 터치하면 앱을 종료 한다.
	 */
	@Override
	public void onBackPressed() {
		// TODO Auto-generated method stub
		mHandler.sendMessage(mHandler.obtainMessage(ALERT_DIALOG_EXIT_ID));
	}
	
	/**
	 * 뒤로가기 버튼을 터치하면 alert 창을 띄우고 앱을 종료한다.
	 */
	private void showDialogSystemExit() {
		new AlertDialog.Builder(SendMePolicyActivity.this)
		.setTitle("프로그램 종료")
		.setMessage("SendMe 를 종료하시겠습니까?")
		.setNegativeButton("취소", new DialogInterface.OnClickListener() {

			@Override
			public void onClick(DialogInterface dialog, int which) {

			}
		})
		.setPositiveButton("확인", new DialogInterface.OnClickListener() {
			
			@Override
			public void onClick(DialogInterface dialog, int which) {
				// TODO Auto-generated method stub
//				System.exit(0);
				sendMeActivityManager.finishAllActivity();
			}
		}).show();
	}
}
